/**
 * @file Platform.h
 * @author Lost
 * @date 五月 2018
 * @brief 
 * 平台，包容应用
 */
#ifndef __PLATFORM_H__
#define __PLATFORM_H__


#include "Singleton.h"
#include "BaseApp.h"
#include "packet.pb.h"

#include "MsgMgr.h"
#include "cs_login.pb.h"
#include "Log.h"

#ifdef _WIN32
#include <hash_map>
using namespace stdext;
#else
#include <ext/hash_map>
using namespace __gnu_cxx;
#endif

/**
 * @brief 平台类
 */
class CPlatform : public CSingleton<CPlatform>
{
public:
    CPlatform();
    ~CPlatform();
public:

    /**
     * @brief 初始化
     */
    bool Init();

    /**
     * @brief 开始运行
     */
    int Run(int argc, char** argv);

    /**
     * @brief 报文处理
     */
    virtual int Handle(const comm::Head &pbHead, const std::string &pszBody);
private:
    /**
     * @brief 添加路由器
     */
    bool AddApp(comm::EnmModuleCmd eModule, CBaseApp *pBaseApp);

private:
    /*!< 报文路由表 */
    typedef hash_multimap<int, CBaseApp *> CmdMultiMap;
    CmdMultiMap m_multimapModuleRoute;

};


#endif // __PLATFORM_H__